iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
佛心分享-SideProject30

晚風涼涼,來點Web3 Hackathon吧系列 第 27

[Day 27] ETHGlobal BANGKOK 2024:專案技術選擇與準備清單

  • 分享至 

  • xImage
  •  

根據我們選定的兩個專案:ChainForge SDK(主力)和ChainWork(備用),今天我們將制定具體的技術選擇,並列出需要事前準備的程式庫整合和程式碼片段。這將幫助我們在黑客松開始前做好充分準備。

  1. ChainForge SDK(多鏈開發者工具包)

技術選擇:

前端:

  • Next.js (v14+):提供良好的開發體驗和性能優化
  • TypeScript:增加程式碼的可靠性
  • Tailwind CSS:快速構建 UI

區塊鏈整合:

  • ethers.js:與以太坊兼容鏈互動
  • Web3.js:作為備選方案,支援更多區塊鏈

多鏈支援:

  • LayerZero SDK:實現跨鏈通訊
  • Polygon SDK:與 Polygon 網路互動
  • Arbitrum SDK:與 Arbitrum 網路互動
  • Scroll SDK:與 Scroll 網路互動

開發工具:

  • Hardhat:智能合約開發和測試
  • The Graph:索引和查詢區塊鏈數據

其他整合:

  • Chainlink:預言機服務
  • IPFS/Filecoin:去中心化存儲

測試:

  • Jest:單元測試
  • Cypress:端到端測試

文檔:

  • Docusaurus:生成 SDK 文件網站
  1. ChainWork(區塊鏈驅動的去中心化人才市場)

技術堆疊:

前端:

  • Next.js (v14+)
  • TypeScript
  • Tailwind CSS
  • shadcn/ui:快速構建好看的 UI 組件

區塊鏈整合:

  • ethers.js

身份驗證:

  • Worldcoin SDK:實現生物特徵識別
  • Web3Auth:多種登入選項

支付系統:

  • Circle API:USDC 支付整合

跨鏈功能:

  • LayerZero SDK

其他整合:

  • IPFS/Filecoin:存儲用戶檔案
  • The Graph:查詢鏈上數據
  • Push Protocol:實現通知功能

智能合約:

  • Solidity
  • OpenZeppelin:安全的合約模板

測試:

  • Jest
  • Cypress

準備清單:

  1. 程式庫整合:

    • 建立一個基本的 Next.js 專案模板,整合 TypeScript 和 Tailwind CSS
    • 準備 ethers.js 的基本配置和常用函數
    • 設置 Hardhat 開發環境,包括基本的智能合約部署腳本
    • 整合 LayerZero SDK,準備跨鏈通訊的基本範例
    • 為 Polygon、Arbitrum 和 Scroll 準備基本的網路配置
  2. 程式碼片段:

    a. 錢包連接:

    import { ethers } from 'ethers';
    
    const connectWallet = async () => {
      if (typeof window.ethereum !== 'undefined') {
        try {
          await window.ethereum.request({ method: 'eth_requestAccounts' });
          const provider = new ethers.providers.Web3Provider(window.ethereum);
          const signer = provider.getSigner();
          const address = await signer.getAddress();
          console.log('Connected:', address);
          return signer;
        } catch (error) {
          console.error('Failed to connect wallet:', error);
        }
      } else {
        console.error('MetaMask is not installed');
      }
    };
    

    b. 跨鏈消息發送(使用 LayerZero):

    import LZEndpointMock from './path-to-LayerZero-contracts/LZEndpointMock.sol';
    
    const sendCrossChainMessage = async (
      endpoint: ethers.Contract,
      destinationChainId: number,
      message: string
    ) => {
      try {
        const tx = await endpoint.send(
          destinationChainId,
          ethers.utils.toUtf8Bytes(message),
          { value: ethers.utils.parseEther('0.01') } // 假設的跨鏈費用
        );
        await tx.wait();
        console.log('Cross-chain message sent');
      } catch (error) {
        console.error('Failed to send cross-chain message:', error);
      }
    };
    

    c. 智能合約互動:

    import { ethers } from 'ethers';
    
    const interactWithContract = async (
      contractAddress: string,
      contractABI: any[],
      method: string,
      params: any[]
    ) => {
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      const signer = provider.getSigner();
      const contract = new ethers.Contract(contractAddress, contractABI, signer);
    
      try {
        const tx = await contract[method](...params);
        const receipt = await tx.wait();
        console.log('Transaction confirmed:', receipt.transactionHash);
        return receipt;
      } catch (error) {
        console.error('Contract interaction failed:', error);
      }
    };
    

    d. IPFS 文件上傳:

    import { create } from 'ipfs-http-client';
    
    const uploadToIPFS = async (file: File) => {
      const client = create({ url: 'https://ipfs.infura.io:5001/api/v0' });
      try {
        const added = await client.add(file);
        const url = `https://ipfs.io/ipfs/${added.path}`;
        console.log('Uploaded to IPFS:', url);
        return url;
      } catch (error) {
        console.error('IPFS upload error:', error);
      }
    };
    
  3. 環境設置:

    • 設置 .env.local 文件模板,包含必要的 API 密鑰和網路配置
    • 準備 Docker 配置文件,確保開發環境的一致性
    • 建立基本的 CI/CD 流程,使用 GitHub Actions
  4. 文件模板:

    • 為 SDK 準備基本的 README.md 模板
    • 建立 API 文件結構,使用 Docusaurus
  5. 測試框架:

    • 設置 Jest 配置文件,包含常用的測試輔助函數
    • 準備 Cypress 的基本設置和常用測試案例模板

結語:
通過準備這些技術選擇和程式碼片段,我們將提高在 ETHGlobal BANGKOK 2024 黑客松中的開發效率。這些準備工作不僅適用於我們的主力專案 ChainForge SDK,也能在開發備用專案 ChainWork 時派上用場,未來參加其他黑客松也可以快速的開始實作專案。


上一篇
[Day 26] ETHGlobal BANGKOK 2024:核心開發技術準備
下一篇
[Day 28] ETHGlobal BANGKOK 2024:實體Hackathon參賽準備
系列文
晚風涼涼,來點Web3 Hackathon吧28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言